/*
 * Encabezado.h
 *
 *  Created on: 14/01/2010
 *      Author: San Martín, Matías I.
 */

#ifndef ENCABEZADO_H_
#define ENCABEZADO_H_

#include "MensajesCommonTypes.h"

#include "../../../Framework/IO/SerializableToCharArray.h"

#include "../../../Middleware/Common/IdPlaneta.h"
#include "../../../Middleware/Common/IdJugador.h"
#include "../../../Middleware/Common/IdJuego.h"

namespace aplicacion {

class Encabezado: public framework::io::SerializableToCharArray {

//------------------------------ ATRIBUTOS ------------------------------
private:
	t_encabezado _data;
//------------------------------ METODOS ------------------------------
public:
	Encabezado();
	virtual ~Encabezado();

	void setOrigen(const IdPlaneta& origen);
	void setOrigen(const IdJugador& origen);
	void setOrigenDirectorio();

	void getOrigen( IdPlaneta& origen);
	void getOrigen( IdJugador& origen);
	const t_identificadorFuente& getOrigen();


	void setDestino(const IdPlaneta& destino);
	void setDestino(const IdJuego& destino);
	void setDestino(const IdJugador& destino);

	void getDestino( IdPlaneta& destino);
	void getDestino( IdJuego& destino);


	void setTipo(const t_tipoMensaje& tipo);
	t_tipoMensaje getTipoMensaje();

	//-------------------- de interfaz framework::io::SerializableToFile
	/**
	 * @see framework::io::SerializableToFile#save(int)
	 */
	virtual size_t save (int fd) const;

	/**
	 * @see framework::io::SerializableToFile#load(int)
	 */
	virtual size_t load (int fd);

	/**
	 * @see middleware::SerializableToFile#saveToArray(int)
	 */
	virtual size_t saveToArray (uint8_t* arr) const;

	/**
	 * @see middleware::SerializableToFile#loadFromArray(int)
	 */
	virtual size_t loadFromArray (const uint8_t* arr);

private:
	friend std::ostream &operator<<( std::ostream &stream, const Encabezado &obj );
};

} //namespace aplicacion

#endif /* ENCABEZADO_H_ */
